// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE-BSD file. See the AUTHORS file for names of contributors.

// SPDX-License-Identifier: Apache-2.0
// Copyright 2017-2020, Intel Corporation

#ifndef STORAGE_LEVELDB_UTIL_HISTOGRAM_H_
#define STORAGE_LEVELDB_UTIL_HISTOGRAM_H_

#include <string>

namespace leveldb
{

class Histogram {
public:
	Histogram()
	{
	}
	~Histogram()
	{
	}

	void Clear();
	void Add(double value);
	void Merge(const Histogram &other);

	std::string ToString() const;

	double Median() const;
	double Percentile(double p) const;
	double Average() const;
	double StandardDeviation() const;

private:
	double min_;
	double max_;
	double num_;
	double sum_;
	double sum_squares_;

	enum { kNumBuckets = 154 };
	static const double kBucketLimit[kNumBuckets];
	double buckets_[kNumBuckets];
};

} // namespace leveldb

#endif // STORAGE_LEVELDB_UTIL_HISTOGRAM_H_
